package cn.iocoder.yudao.module.of.service.taskinfo;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.of.controller.admin.taskinfo.vo.*;
import cn.iocoder.yudao.module.of.dal.dataobject.taskinfo.TaskInfoDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptTreeVO;

import javax.validation.Valid;
import java.util.List;

/**
 * 任务模块 Service 接口
 *
 * @author 超级管理员
 */
public interface TaskInfoService {

    /**
     * 创建任务模块
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createTaskInfo(@Valid TaskInfoAddReqVO createReqVO);

    /**
     * 更新任务模块
     *
     * @param updateReqVO 更新信息
     */
    void updateTaskInfo(@Valid TaskInfoUpdateReqVO updateReqVO);

    /**
     * 删除任务模块
     *
     * @param id 编号
     */
    void deleteTaskInfo(Long id);

    /**
     * 获得任务详情
     *
     * @param taskId 任务id
     * @return 任务模块
     */
    TaskInfoRespVO getTaskDetail(Long taskId);

    /**
     * 获得主子任务详情
     *
     * @param masterTaskId 主任务id
     * @return 任务集合
     */
    List<TaskInfoRespVO> getSubTaskDetail(Long masterTaskId);


    /**
     * 获得任务模块分页
     *
     * @param pageReqVO 分页查询
     * @return 任务模块分页
     */
    PageResult<TaskInfoRespVO> getTaskInfoPage(TaskInfoPageReqVO pageReqVO);


    /**
     * 获得部门树
     *
     * @return tree
     */
    List<DeptTreeVO> getDeptTree();

    /**
     * 获得主办任务的部门信息
     *
     * @return DeptTreeVO
     */
    List<TaskDeptTreeVO> getMasterTaskDept();

    /**
     * 获得部门下用户
     *
     * @return tree
     */
    PageResult<SampleUserVO> getDeptUser(DeptUserReqVO deptUserReqVO);

    /**
     * 获得任务编码
     *
     * @return 编码
     */
    String getTaskCode();

    /**
     * 提交审批
     * 插入到审批表中
     */
    void submitApprovalTask(Long id);

    /**
     * 根据主任务id,获得任务列表
     *
     * @return 任务列表
     */
    List<TaskInfoDO> listTaskListByMasterId(Long masterId);

}